using System;
using Roslyn.Compilers.CSharp;

namespace BITS.PreCompiler.CSharp.Syntax
{
    /// <summary>
    /// 
    /// </summary>
    /// <typeparam name="TSyntaxNode">The type of the syntax node.</typeparam>
    public interface IType<out TSyntaxNode> : IBaseType<TSyntaxNode>, IHaveMember<MemberDeclarationSyntax>
        where TSyntaxNode : TypeDeclarationSyntax
    {
        /// <summary>
        /// Gets the identifier.
        /// </summary>
        SyntaxToken Identifier { get; }

        /// <summary>
        /// Gets or sets the name.
        /// </summary>
        String Name { get; set; }

        /// <summary>
        /// Gets the type syntax.
        /// </summary>
        TypeSyntax TypeSyntax { get; }

        void AddTypeParameter(String name);

        void AddTypeParameter(Interface type);

        void AddTypeParameter(Class type);
    }
}